// but the glassy heart is born to be broken.
#include<bits/stdc++.h>
#define F(i, a, b) for(int (i)=(a);(i)<=(b);++(i))
#define dF(i, a, b) for(int (i)=(a);(i)>=(b);--(i))
#define mp make_pair
#define endl '\n'
#define ENDL putchar('\n')
#define forGraph(x) for(int i = head[x]; i; i = G[i].nxt)
#define pii pair<int, int>
#define pb push_back
using namespace std;

template<typename T>void read(T &x) {
    x = 0;
    char ch = getchar(); bool f = 0;
    while(!isdigit(ch)) {f |= (ch == '-'); ch = getchar();}
    while(isdigit(ch)) {x = x * 10 + (ch - '0'); ch = getchar();}
    x = (f ? -x : x);
}

template<typename T>void write(T x) {
    if(x < 0) {putchar('-'); x = -x;}
    char _buf[70]; int p = 0;
    do{_buf[++p] = x % 10 + '0'; x /= 10;} while(x);
    do{putchar(_buf[p--]);} while(p);
}

const int N = 5e5 + 5, M = 1e6 + 5;

struct Graph{
    int to, w, nxt;
}G[M << 1];
int head[N], g_cnt;
void addEdge(int u, int v, int w = 1) {
    G[++g_cnt] = (Graph){v, w, head[u]}; head[u] = g_cnt;
}

int n, m, p, q, r;
int a[N];
vector<int> v;
int lft = 0;

int main() {
    freopen("duel.in", "r", stdin);
    freopen("duel.out", "w", stdout);
    read(n);
    F(i, 1, n) read(a[i]);
    sort(a + 1, a + n + 1);
    int sam = a[1], cnt = 1;
    F(i, 2, n) {
        if(a[i] == sam) cnt++;
        else {
            v.pb(cnt);
            sam = a[i]; cnt = 1;
        }
    }
    v.pb(cnt);
    write(*max_element(v.begin(), v.end()));
}

/*
5
1 2 3 1 2
*/
/*
Finish at 14:58
ez
*/
